Bonjour, Pour les développeurs de jeux ou des personnes techniques: amusez-vous avec le lien ci-dessous. https://developer.valvesoftware.com/wiki/Source_Multiplayer_Networking Le moteur de jeu Valve source engine est utilisé par les jeux : Counter Strike: Global Offensive Half-Life 2: Deathmatch Counter Strike: Source Day of Defeat: Source Team Fortress 2 Left for Dead Left for Dead 2 Pour les personnes non techniques, voir ci-dessous, je vais expliquer comment cela fonctionne (c'est un résumé du lien ci-dessus avec des explications et des conseils): - Le serveur simule le monde virtuel un certain nombre de fois par seconde, ce sont les ticks/seconde. Ainsi, un tickrate 128 signifie que le serveur simule le monde toutes les 7,8 millisecondes (128 fois par seconde), un tickrate 64 signifie toutes les 15 millisecondes. Simuler le monde signifie calculer les positions, les événements ... - Les SEULES COMMANDES RESEAUX UTILES pour le client sont "rate", "cl_updaterate", "cl_cmdrate", "cl_interp", "cl_interp_ratio", "cl_predict", "cl_interpolate" et "cl_lagcompensation" : => "rate": Si le serveur essaie d'envoyer plus de données que ne peut supporter votre connexion, c'est mauvais car des données seront perdues (packet loss). En théorie, la valeur de rate devrait correspondre à la vitesse maximum de téléchargement de votre connexion. Par exemple, avec une connexion avec une vitesse de téléchargement maximale égale à 1 Mo / seconde, vous devriez avoir 1 Mo = 1 * 1024 Ko = 1 * 1024 * 1024 octets = 1048576 octets / seconde (oui, 1 Mo = 1024 Ko et 1 Ko = 1024 octets, mais ce n'est pas ce dont on parle). Avec cela, vous devez écrire dans votre config rate "1048576". MAIS, dans le monde réel de l'univers réel (avec la guerre, la famine et justin bieber), il n'y a pas de jeux qui envoient 1 Mo / seconde à chaque client. Donc 400000 est assez, même 128000. Exemples: rate 128000 signifie 0,12 Mo / seconde rate 400000 signifie 0,4 Mo / seconde => "cl_updaterate": La valeur, 128 par exemple, signifie «hey serveur, je suis un client, envoie-moi 128 fois / seconde une mise à jour du monde". Deux limites: le serveur ne vous enverra jamais plus de mise à jour du monde que le tickrate du serveur (il ne peut pas vous envoyer 128 mises à jour / seconde si il simule 64 fois le monde / seconde ... science bitch) et il ne peut pas envoyer plus de données que la valeur "rate" de votre config (sinon perte de données !!!). La meilleure valeur est la même que le tickrate du serveur, rien d'autre (les serveurs de Valve ont un tickrate de 64, et la plupart des serveurs dédiés sont à 128, il faut donc changer la valeur dans la console avant de se connecter au serveur) => "Cl_cmdrate": La valeur, 128 par exemple, signifie «hey serveur, je vous enverrai 128 fois / seconde une mise à jour de mes input (souris, clavier, ect ...)". Aucune limite pour cette valeur. MAIS, inutile d'envoyer plus de mise à jour que le tickrate serveur (vous pouvez envoyer 128 mises à jour / seconde si vous voulez, mais si le serveur simule le monde 64 fois / seconde, vous avez 128-64 mises à jour inutiles ... Je vous laisse calculer, science bitch). La meilleure valeur est la même que le tickrate du serveur, rien d'autre (les serveurs de Valve ont un tickrate de 64, et la plupart des serveurs dédiés sont à 128, il faut donc changer la valeur dans la console avant de se connecter au serveur) => "Cl_interpolate": Mettre à 1, cela signifie activer l'interpolation (explication de l'interpolation ci-dessous avec "cl_interp" et "cl_interp_ratio"). Mettre à 0, signifie sans interpolation, de sorte que les deux commandes ci-dessous n'ont pas d'effet. La valeur à définir ici est 1, rien d'autre. Vous n'avez AUCUNE RAISON VALABLE de désactiver l'interpolation. => "cl_interp": Plus compliqué. Il y a plusieurs mécanismes utilisés par le moteur de jeu pour avoir une bonne sensation de jeu (de fluidité ...). Comme la documentation le dit : "Si les objets (entités) sont affichés à chaque mise à jour reçue par le serveur, les objets en mouvement et l'animation seraient saccadés et des données perdues sur le réseau poseraient également des gros problèmes. L'astuce pour résoudre ce problème est de remonter dans le temps pour le rendu graphique.". Donc, par défaut, le client (votre jeu sur votre PC) ne montre pas la dernière mise à jour du monde reçue par le serveur, pas l'avant-dernier, mais l'avant-avant-dernier. Le problème avec cette commande c'est que c'est compliqué à calculer pour chaque serveur. En effet, une valeur égale à 0,1 signifie que votre jeu vous affiche les données reçues 100 millisecondes avant les dernières données reçues (l'unité de cl_interp est la seconde, 0,1 seconde est égale à 100 millisecondes). Cette valeur ne fonctionne qu'avec un cl_updaterate égale à 20. En effet, avec updaterate égale à 20, vous recevez une mise à jour toutes les 50 millisecondes (1 seconde = 1000 millisecondes -> 1000/20 = 50 millisecondes), donc avec un "cl_interp" à 0,1 , votre client remonte dans le temps de 100 millisecondes, ce qui correspond à 2 mises à jour (50 millisecondes + 50 millisecondes = 100 millisecondes ... science, ect, ect ...). Vous devez adapter le cl_updaterate au tickrate du serveur et adapter le cl_interp au cl_updaterate ..., même pour Valve c'est chiant. Donc, ils ont introduit la commande "cl_interp_ratio" pour rendre ça très simple. La seule valeur valable pour la commande "cl_interp" est 0, rien d'autre. => "Cl_interp_ratio": Comme je l'ai dit avant, pour rendre l'interpolation (interp = interpolation si vous ne comprenez pas) très simple à utiliser, l'interpolation est calculé comme ceci "période d'interpolation = max (cl_interp, cl_interp_ratio / cl_updaterate)". Cette équation signifie «interpolation en seconde est égale à la valeur maximale entre la commande cl_interp et la division de la commande cl_interp_ratio par la commande cl_updaterate". Nous avons placé "cl_interp"à 0 juste avant (si vous ne comprenez pas, vous n'avez pas lu les explications de "cl_interp" bad boy), de sorte "cl_interp" ne sera jamais le maximum. La commande "Cl_updaterate" doit correspondre avec le tickrate du serveur (si vous ne comprenez pas, vous n'avez pas lu explications de "cl_updaterate" bad boy). Donc, il y a cette "cl_interp_ratio". C'est très simple. Vous voulez revenir dans le temps de 2 mises à jour ? OK, cl_interp_ratio est égale à 2. Point final. Au lieu de calculer le temps en seconde pour remonter dans le temps de 2 mises à jour à partir du tickrate serveur, il vous suffit d'indiquer le nombre de mises à jour que vous voulez garder. Maintenant, je vous vois arriver: "Donc, je dois avoir le moins d'interpolation possible pour avoir la dernière représentation du monde et les hitboxes !!" NON, NON et NON. Pourquoi? A cause du "lagcompensation" (voir ci-dessous). Donc, une bonne valeur pour "cl_interp_ratio" est 2. Avec cela, vous gardez la fluidité dans votre jeu, la protection en cas de perte de données sur le réseau et ce ne sera jamais un désavantage par rapport aux autres joueurs. => "cl_lagcompensation": Entre la représentation du monde que vous avez sur votre écran et la situation du monde sur lequel le serveur fonctionne, il y a une énorme différence. Mais, pas de panique, le serveur connait l'interpolation de chaque joueur et le ping de chaque joueur. Ainsi, le serveur tient compte des différences de configuration de chaque joueur. Lorsque vous faites un kill, vous pouvez parfois avoir la sensation que votre viseur n'était pas exactement sur lui, mais le serveur calcule ceci : moment d'exécution du tir = Heure actuelle du serveur - ping - interpolation. Ce que'il faut comprendre c'est qu'il y a une différence entre le moment où le serveur reçoit l'information (temps réel) du tire de votre part et le moment où le tir s'est produit dans le jeu (temps simulé). Le serveur calcul le temps simulé à partir du temps réel en tenant compte du ping et de l'interpolation spécifique au joueur. Donc, la bonne valeur pour cette commande est 1 (cela signifie lagcompensation activé, par défaut c'est à 1). => "cl_predict" : C'est un autre mécanisme utilisé par le moteur de jeu pour avoir une bonne sensation de jeu (de fluidité ...). Pour faire simple, l'extrapolation permet à votre jeu de ne pas attendre les données du serveur pour faire bouger votre perso après avoir cliqué sur avancer (par exemple). Si l'extrapolation n'est pas activée et que vous avez un ping de 100, cela implique qu'entre le moment où vous cliquez sur la touche avancer et le moment où votre jeu fera avancer votre perso, il se passera au moins 100 ms (le temps pour les données de faire l'aller-retour). Avec l'extrapolation, votre client estime (extrapole) par lui-même votre future position et la corrige si nécessaire lorsqu'il reçoit les prochaines données du serveur. Cela améliore les sensations de jeu (fluidité, précision du tir...). Il faut donc positionner cette commande à 1 pour activer l'extrapolation (par défaut c'est à 1). Pour conclure : Je vous vois arriver : "Alors, je dois désactiver l'interpolation, l'extrapolation et le lagcompensation pour toujours avoir la dernière représentation du jeu !!!". Non, non et non. Vous devez avoir toutes ces options activées. Tous ces mécanismes activés vous permettent d'avoir une bonne expérience de jeu (fluidite...), vous préservent des pertes de données sur le réseau (packet loss) qui peuvent vous empêcher de toucher correctement et ne vous désavantages pas du tout par rapport aux autres joueurs puisque le ping et l'interpolation sont pris en compte dans les calculs du serveur. Autre chose: tickrate 128 ou 64? Peu importe, parce que tous les joueurs jouent sur le même serveur. Ils n'auront jamais plus de mises à jour que vous, même si ils ont mis leur "cl_updaterate" à 128 sur un serveur avec un tickrate 64. Le cl_updaterate et cl_cmdrate doivent être adaptés au tickrate serveur pour ne pas être désavantagés, c'est tout. La seule différence est pour le serveur et pour votre bande passante. Le serveur va devoir calculer 128 mises à jour par seconde, d'où une augmentation des calculs pour ses processeurs, chaleur et tout ce qui va avec (il faut avoir l'infrastructure, c'est sans doute pour ça que Valve a passé ses serveurs MM de 128 à 64). Pour votre bande passante, si le tickrate et le cl_updaterate sont à 128, le serveur vous enverra deux fois plus de données par seconde qu'à 64. Il faut donc la connexion capable d'absorber ce flux de données (enfin bon, si vous n'avez pas une connexion capable d'absorber 0,12 Mo / seconde (rate 128000 suffisant), c'est que vous êtes au fin fond du périgord avec un modem 56K de club-internet (les jeunes vous comprendrez pas), et dans ce cas pensez plutôt à sortir dehors pour profiter des magnifiques paysages et de la nature plutôt que de glander comme un couillon sur votre PC). Autre chose numéro 2 : penser que, avec un tickrate 64, 100 fps suffisent, LARGEMENT. Pas besoin d'avoir 150 fps, 200 ou plus. La seule config qui peut vous désavantager est si vous avez moins de fps que le tickrate du serveur. Le jeu ne pourra donc pas afficher toutes les informations qu'il pourrait. Mais ne sachant pas quelles mises à jour seront affichées ou pas, ce n'est pas vraiment un désavantage, juste une raison pour rager :). Tout ce que vous allez gagner en mettant fps_max à 0 (c'est-à-dire pas de limite de fps), c'est de faire chauffer votre carte graphique comme un demeuré pour... RIEN. 100 fps suffisent pour un tickrate et updaterate à 64. Pour du 128, mettez un peu plus, genre 150 fps (parce que la cadence de rafraichissement du rendu graphique n'est pas forcément synchronisée avec la cadence de réception des données, par précaution mettez un peu plus de fps que de tickrate et de updaterate). Pas besoin donc d'aller acheter le dernier écran à 400 balles ou la dernière carte graphique qu'il faudra refroidir à l'azote liquide. CS GO est un jeu peu gourmand. Vous pourrez tout à fait devenir le meilleur joueur de l'univers avec un PC portable à peu près potable (sauf que montrez moi un écran de portable capable d'afficher 150 fps hein ?! hein ?! Voilà c'est ça qui est con, il faudrait un écran externe). Autre chose numéro 3 : Pour les lan, la seule différence est la qualité de la connexion qui est bien supérieure à celle sur internet. Pour autant, l'interpolation ne doit pas être désactivée car au-delà de la protection en cas de perte de données sur le réseau (ce qui est beaucoup moins fréquent en lan), elle sert aussi à améliorer la fluidité du jeu (en ayant toujours 2 mises à jour en réserve). Vous pouvez par contre désactiver l'extrapolation (cl_predict à 0). Si vous regardez la plupart des config de pro, ce sont des config pour des conditions de connexion "parfaites" (en lan justement) et leur cl_predict est à 0 car le ping est négligeable. Pour le reste, ça ne change rien. Il faut adapter l'updaterate et le cmdrate au serveur. Le rate à 128000. Autre chose numéro 4 : Un joueur mal configuré ne sera pas plus difficile à toucher. Çà dépend de votre config, pas de la sienne. Même si le joueur met un cmdrate inférieur (c'est-à-dire qu'il envoie moins de fois par seconde ses actions souris/clavier au serveur), c'est lui qui sera désavantagé, pas vous. Le serveur simule X fois/sec (tickrate) le monde. Il vous enverra donc les dernières positions connues du joueur en tenant compte de sa configuration à lui. Le seul désavantagé dans l'histoire, c'est lui. Pour la simple et bonne raison que plus son paramétrage est mauvais par rapport à sa connexion, plus les corrections effectuées par le serveur sur ses actions seront nombreuses et donc sa représentation du monde sur son écran faussée. Il aura souvent l'impression d'avoir le viseur sur vous mais de pas vous toucher pour autant. Aussi, si il fait le contraire de ce qu'il faut faire parce qu'il est têtu : désactiver interpolation, extrapolation et lag compensation en pensant avoir la dernière représentation du monde possible, ce sera encore pire pour lui mais pas pour vous. Vous aurez toujours sa dernière position connue du serveur, mais de son côté, son jeu passera son temps à corriger sa position et ses actions. Il aura cette impression de ne jamais toucher. Comme le dit la documentation de Valve : "Don't turn off view interpolation and/or lag compensation It will not improve movement or shooting precision. " Autre chose numéro 5 : Pour le mode spectateur souvent décrié (GOTV), la documentation dit que lorsque vous observez un joueur en première personne, vous ne voyez pas vraiment ce qu'il voit car le spectateur n'a pas le lag compensation. Donc c'est normal si parfois vous ne comprenez pas comment le gars a pu shooter un autre où si vous voyez des trucs bizarres. Autre chose numéro 6 : Vérifiez avec net_graph 1 que vous n'avez pas de choke ou de loss. Si les deux sont à 0 avec toutes les config ci-dessus, vous n'aurez plus aucune raison de cracher sur le jeu. C'est juste que vous êtes nul. L'entrainement, point final. P.S. (après 6 autres choses...) : Selon les serveurs, certaines des valeurs susnommées (héhé, bien placé celui-là) sont forcées. Les plus courantes sont le rate limité à 128000 et le cmdrate forcé au tickrate. Mais selon les serveurs ça peut ne pas être le cas. ça ne coûte rien de les mettre dans votre config. Après vous êtes grand, vous faites bien ce que vous voulez. P.S. numéro 2 (oh faites pas chier hein) : Parce que ma bonté n'a pas de limite et que j'aime mon prochain, pour vérifier votre config, servez-vous de net_graph 1. Le chiffre en bas à gauche "tick" vous indique le tickrate du serveur sur lequel vous vous trouvez. Les deux chiffres en haut à droite vous indiquent votre updaterate ("up") actuel et votre cmdrate actuel ("cmd"). Il faut que ces trois-là correspondent, sinon déconnectez-vous, modifier les dans la console puis reconnectez-vous. Vérifiez, comme je l'ai déjà dit, que vous avez 0 en choke et loss (sinon vérifiez votre rate, interp et le reste directement sur un serveur ingame pour vérifier que vous avez pas merdé votre config ou qu'elle n'est malencontreusement pas chargée par le jeu ou alors dites à votre famille d'arrêter de pomper toute la connexion, vous êtes prioritaire le roi l'élu c'est bien connu après tout), les fps qui vont bien (si vous avez des chutes de fps dans les smokes ou autres, pensez à réduire le niveau de détail du jeu dans les options du jeu et de votre carte graphique et à désactiver la synchro verticale dans les paramètres de votre carte graphique) et là vous êtes paré pour mettre un ou deux headshot par mois, et encore, vu votre niveau. Tendres baisers.